package com.example.leoss.Duquzifu;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 汉字转换位汉语拼音，英文字符不变
 */
public class Cn2Spell {

    public static StringBuffer sb = new StringBuffer();

    /**
     * 获取汉字字符串的首字母，英文字符不变
     * 例如：阿飞→af
     */
    public static String getPinYinHeadChar(String chines)
    {
        sb.setLength(0);
        char[] chars = chines.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < chars.length; i++)
        {
            if (chars[i] > 128) {
                try {
                    sb.append(PinyinHelper.toHanyuPinyinStringArray(chars[i], defaultFormat)[0].charAt(0));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                sb.append(chars[i]);
            }
        }
        return sb.toString();
    }

    /**
     * 获取汉字字符串的第一个字母
     */
    public static String getPinYinFirstLetter(String str)
    {
        sb.setLength(0);
        char c = str.charAt(0);
        String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
        if (pinyinArray != null) {
            sb.append(pinyinArray[0].charAt(0));
        } else {
            sb.append(c);
        }
        return sb.toString();
    }

    /**
     * 获取汉字字符串的汉语拼音，英文字符不变
     */
//    public static String getPinYin(String chines) {
//        sb.setLength(0);
//        char[] nameChar = chines.toCharArray();
//
//        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
//        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
//        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//
//        for (int i = 0; i < nameChar.length; i++)
//        {
//            if (nameChar[i] > 128)
//            {
//                try {
//                    sb.append(PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0]);
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            } else {
//                sb.append(nameChar[i]);
//            }
//        }
//        return sb.toString();
//    }

    public static String getPinYin(String str) {
        //输出格式
        HanyuPinyinOutputFormat mFormat = new HanyuPinyinOutputFormat();
        //输出为大写字母
        mFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        //去掉音标
        mFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        StringBuilder sb = new StringBuilder();
        char[] chars = str.toCharArray();
        for (char c : chars) {
            //如果是空格跳过
            if (Character.isWhitespace(c)) {
                continue;
            }
            //判断是否为汉字
            if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                String s = "";
                try {
                    //通过char得到拼音集合,单->dan或者是shan
                    s = PinyinHelper.toHanyuPinyinStringArray(c, mFormat)[0];
                    sb.append(s);
                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                    badHanyuPinyinOutputFormatCombination.printStackTrace();
                    sb.append(s);
                }
            } else if (Character.toString(c).matches("^[a-zA-Z]*")) {//判断是否是英语，是保留
                sb.append(c);
            } else {    //不是汉字不是英语的，保留下来的,使用“#”代替，归为一类
                sb.append("#");
            }
        }
        return sb.toString();
    }


}